/**
 * unique_ptr指针包含在头文件<memory>
 * 智能指针传参时最好传引用一般不会传地址
 * .get()函数返回智能指针的原始指针
 * .release()函数将原始指针返回智能指针就将变成一个空指针
 * .reset()函数释放智能指针指向的资源对象，同时指向新的对象
 * .swap()函数交换对象
*/
#include <iostream>
#include <memory>
using namespace std;
class AA{
public:
    string name;
    AA(string m_name):name(m_name){
       cout<<"AA的构造函数"<<endl; 
    }
    ~AA(){
        cout<<"AA类的析构函数"<<endl;
    }
};
void fun(unique_ptr<AA> &ptr){
    cout<<ptr->name<<endl;
}
int main()
{
    AA* a=new AA("张三");
    unique_ptr<AA> pu1(a);//用智能指针管理AA类的对象a--使用已经存在的地址
    unique_ptr<AA> pu2(new AA("李四"));
    cout<<pu2->name<<endl;
    pu2.release();
    fun(pu1);
    return 0;
}